import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
class com implements Comparator<Integer>{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}
public class topK2 {
    public static void main(String[] args) {
        int[]arr={3,5,6,88,99,2,1,5,};
        Scanner scanner=new Scanner(System.in);
        int k=scanner.nextInt();
        PriorityQueue<Integer> p=new PriorityQueue(new com());



        for (int i = 0; i < arr.length; i++) {
            //先将前k个元素创建成大根堆
            if(p.size()<k){
                p.offer(arr[i]);
            }else{
                //从第k+1个位置开始判断比较数组元素与堆顶元素的大小
                //如果大于堆顶元素则不用管，如果小于堆顶元素则弹出堆顶元素
                //并将该数组元素插入到堆中。
                int top=p.peek();
                if(arr[i]<top){
                    p.poll();
                    p.offer(arr[i]);
                }
            }
        }

        //因为堆中储存的就是K个元素，所以只需将堆中的所有元素打印出来
        //就是前k个最小的元素。
        while(p.size()>0){
            System.out.print(p.poll()+" ");
        }
    }

}
